// 微软考的时候是困难题:停车场(lintcode上的题)https://www.lintcode.com/problem/498/
// 力扣上面的比较简单：https://leetcode.cn/problems/design-parking-system/description/
// 简单变量多if版本
package main

func main() {
	// ParkingSystem对象的初始化和调用
	obj := Constructor(1, 1, 0)
	// carType 有三种类型：大，中，小，分别用数字 1， 2 和 3 表示
	obj.AddCar(1) // 返回 true ，因为有 1 个空的大车位
	obj.AddCar(2) // 返回 true ，因为有 1 个空的中车位
	obj.AddCar(3) // 返回 false ，因为没有空的小车位
	obj.AddCar(1) // 返回 false ，因为没有空的大车位，唯一一个大车位已经被占据了
}

type ParkingSystem struct {
	big    int
	medium int
	small  int
}

// 参考k8s源码的话这里的初始函数命名是NewParkingSystem(big, medium, small int) *ParkingSystem{}
func Constructor(big, medium, small int) ParkingSystem {
	ps := ParkingSystem{
		big:    big,
		medium: medium,
		small:  small,
	}
	return ps
}

// 参考k8s源码的话这里的是：func (ps *ParkingSystem) AddCar(carType int) bool {
func (this *ParkingSystem) AddCar(carType int) bool {
	switch carType {
	case 1:
		this.big--
		if this.big < 0 {
			return false
		}
	case 2:
		this.medium--
		if this.medium < 0 {
			return false
		}
	case 3:
		this.small--
		if this.small < 0 {
			return false
		}
	}
	return true
}
